package com.wksc.framework.impexp.util;

import java.net.URL;
import java.net.URLDecoder;

/**
 * 此类提供获取导入导出运行外部配置的一些参数
 * 
 * @author QinJinxue
 * @daDec 23, 2010
 * @since 1.0
 */
public class SysParam {

	/**
	 * 获取工程的绝对路径
	 * 
	 * @author QinJinxue
	 * @return
	 */
	public static String getSysPath() {
		String filePath = null;
		try {
			URL url = SysParam.class.getProtectionDomain().getCodeSource()
					.getLocation();
            filePath = URLDecoder.decode(url.getPath(), "UTF-8");
			filePath = filePath.substring(0, filePath.indexOf("WEB-INF"));
			java.io.File file = new java.io.File(filePath);
			filePath = file.getAbsolutePath();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return filePath;
	}

	/**
	 * 获取当前系统路径的分隔符
	 * 
	 * @author QinJinxue
	 * @return 系统路径分隔符
	 */
	public static String getSeparator() {
		return System.getProperty("file.separator");
	}

	/**
	 * 从配置文件获取允许添加的最大任务数,并做范围限制
	 * 
	 * @author QinJinxue
	 * @return
	 */
	public static int getMaxJobs() {
		int tem = Cfg.getInstance().getInt("maxJobs", 20);// 读取配置文件
		if (tem < 1 || tem > 50) {
			tem = 20;
		}
		return tem;
	}

	/**
	 * 从配置文件获取单个文件导出的条数并做范围限制
	 * 
	 * @author QinJinxue
	 * @return
	 */
	public static int getExportMaxLine() {
		int tem = Cfg.getInstance().getInt("exportMaxLine", 65530);// 读取配置文件
		if (tem < 1 || tem > 65530) {
			tem = 65530;
		}
		return tem;
	}

	/**
	 * 从配置文件获取单次任务允许导出最大文件数,并做范围限制
	 * 
	 * @author QinJinxue
	 * @return
	 */
	public static int getExpMaxFiles() {
		int tem = Cfg.getInstance().getInt("expMaxFiles", 1);// 读取配置文件
		if (tem < 1 || tem > 10) {
			tem = 10;
		}
		return tem;
	}

	/**
	 * 从配置文件获取导入每次处理的行数
	 * 
	 * @author QinJinxue
	 * @return
	 */
	public static int getImpOnceProLine() {
		int tem = Cfg.getInstance().getInt("onceProLine", 5000);// 读取配置文件
		if (tem < 1000 || tem > 65535) {
			tem = 10000;
		}
		return tem;
	}

	/**
	 * 从配置文件获取清理文件的天数
	 * 
	 * @author QinJinxue
	 * @return
	 */
	public static int getCleanDays() {
		int tem = Cfg.getInstance().getInt("cleanDay", 7);
		if (tem < 1 || tem > 14) {
			tem = 7;
		}
		return tem;
	}

	/**
	 * 从配置文件获取任务执行的间隔时间
	 * 
	 * @author QinJinxue
	 * @return
	 */
	public static int getThreadSleep() {
		int tem = Cfg.getInstance().getInt("threadSleep", 60000);
		if (tem < 10000 || tem > 60000000) {
			tem = 60000;
		}
		return tem;
	}
	
	/**
	 * 导入导出同时运行的线程数
	 * @author wanglei
	 * @return 
	 * */
	public static int getThreadNum() {
		int tem = Cfg.getInstance().getInt("threadNum", 3);
		if (tem < 1 || tem > 5) {
			tem = 3;
		}
		return tem;
	}

	/**
	 * 从配置文件获取日志类
	 * 
	 * @author QinJinxue
	 * @return
	 */
	public static String getLogStr() {
		return Cfg.getInstance().getString("log", null);
	}

	/**
	 * 从配置文件获取日志类
	 * 
	 * @author QinJinxue
	 * @return
	 */
	public static String getData2FileDaoStr() {
		return Cfg.getInstance().getString("impExpData2FileDao", null);
	}

	/**
	 * 从配置文件获取操作导入导出表的类
	 * 
	 * @author QinJinxue
	 * @return
	 */
	public static String getLogTableStr() {
		return Cfg.getInstance().getString("impExpTaskDao", null);
	}

	/**
	 * 从配置文件获取导出报表格式的类
	 * 
	 * @author QinJinxue
	 * @return
	 */
	public static String getGridViewWrite() {
		return Cfg.getInstance().getString("gridViewWrite", null);
	}

    /**
     * 从配置文件获取国际化信息的类
     * 
     * @author zhangyan
     * @return 类全路径例如:com.huawei.comm.impexp.inter.MessageI18nImpExpImpl
     */
    public static String getI18nImplClass() {
        return Cfg.getInstance().getString("messageI18nImpExpImpl", null);
    }

    /**
     * 包含导入导出完整表头的类
     * 
     * @author zhangyan
     * @return 类全路径例如:com.huawei.comm.impexp.bean.ImpExpHeader
     */
    public static String getImpExpHeader() {
        return Cfg.getInstance().getString("impExpHeader", null);
    }
    
    /**
	 * 从配置文件获取操作导出模式
	 * 
	 * @author QinJinxue
	 * @return
	 */
	public static int getExpModeInt() {
		return Cfg.getInstance().getInt("expMode", 0);
	}

	/**
	 * 从配置文件获取操作导入模式
	 * 
	 * @author QinJinxue
	 * @return
	 */
	public static int getImpModeInt() {
		return Cfg.getInstance().getInt("impMode", 0);
	}

	/**
	 * 方法描述：从配置文件获取是否使用UTF-8编码格式生成导出文件
	 * <p>中国地区默认不使用UTF-8编码模式,因此此值默认为false</p>
	 * <p>海外地区与使用特殊编码格式的地区请将impExp.xml中utf-8一项的值更改为true</p>
	 * @creator wanglei
	 * @return
	 */
	public static boolean getUTF8Mode(){
		return Cfg.getInstance().getBoolean("utf-8", false);
	}
}
